本发明实施例提供了一种数据同步方法和装置。该方法包括:扫描代码以捕获同步指令;将所捕获的同步指令替换为陷入指令;在代码运行至陷入指令时,代码执行权陷入至分布式共享内存DSM单元,其中DSM单元实现并发多写协议,但在执行同步指令时实现单写协议,从而能够支持并发多写协议并解决了并发多写协议带来的同步问题。
1.一种数据同步方法,其特征在于,包括:在代码运行前,代码扫描单元扫描代码以捕获同步指令,所述代码扫描单元在所捕获的同步指令之前加入陷入指令;在代码运行至所述陷入指令时,分布式共享内存DSM单元获取代码执行权并执行所述同步指令,其中所述DSM单元实现并发多写协议,在执行所述同步指令时实现单写协议。
2.如权利要求1所述的方法,其特征在于,在所述代码运行至所述陷入指令之前,还包括:所述代码扫描单元扫描代码以捕获流程改变指令,并将所述流程改变指令替换为所述陷入指令。
3.如权利要求2所述的方法,其特征在于,还包括:所述DSM单元在执行所述流程改变指令时,判断流程改变指向的目标页面是否为已扫描的页面;在所述流程改变指向的目标页面为已扫描的页面时,将执行流程改变至所述已扫描的页面中的对应代码并执行所述对应代码;在所述流程改变指向的目标页面为未扫描的页面时,对所述未扫描的页面执行所述扫描代码以捕获同步指令的过程和所述将所捕获的同步指令替换为陷入指令的过程。
4.如权利要求1所述的方法,其特征在于,如果所述同步指令为内存屏障指令,则所述DSM单元在执行所述同步指令时实现单写协议,包括:所述DSM单元等待所有数据更新操作完成之后,返回代码执行权。
5.如权利要求1所述的方法,其特征在于,如果所述同步指令为原子操作指令,则所述DSM单元在执行所述同步指令时实现单写协议,包括:向其他节点发送广播通知,以使得其他节点将对应的数据设为只读,禁止对所述对应的数据进行同步操作;在执行完所述原子操作指令之后将更新数据广播给其他节点,以使得其他节点更新所述对应的数据,并允许对所述对应的数据进行同步操作。
6.如权利要求1所述的方法,其特征在于,还包括:在代码执行的过程中产生缺页异常时,所述DSM单元获取代码执行权。
7.如权利要求6所述的方法,其特征在于,如果所述缺页异常由读操作引起,则所述DSM单元生成所述读操作所针对的数据的副本,并使得其他节点上对应的副本设为只读;如果所述缺页异常由写操作引起,则当所述写操作所针对的页面不存在时,所述DSM单元申请高速缓存并将数据写入该高速缓存中,当所述写操作所针对的页面存在时,所述DSM单元更新数据并将更新的数据以及更新的全局时间广播给其他节点,以便其他节点根据所述全局时间更新对应的数据。
8.如权利要求1-7任一项所述的方法,其特征在于,所述并发多写协议为写更新协议。
9.一种数据同步装置,其特征在于,包括:代码扫描单元,用于在代码运行前,扫描代码以捕获同步指令,在所捕获的同步指令之前加入陷入指令;分布式共享内存DSM单元,用于在代码运行至所述陷入指令时,获取代码执行权并执行所述同步指令,其中所述DSM单元实现并发多写协议,在执行所述同步指令时实现单写协议。
10.如权利要求9所述的装置,其特征在于,所述代码扫描单元还用于扫描代码以捕获流程改变指令,并将所述流程改变指令替换为所述陷入指令。
11.如权利要求10所述的装置,其特征在于,所述DSM单元还用于在执行所述流程改变指令时,判断流程改变指向的目标页面是否为已扫描的页面,在所述流程改变指向的目标页面为已扫描的页面时,将执行流程改变至所述已扫描的页面中的对应代码并执行所述对应代码,在所述流程改变指向的目标页面为未扫描的页面时,调用所述代码扫描单元对所述未扫描的页面执行所述扫描代码以捕获同步指令并将所捕获的同步指令替换为陷入指令的过程。
12.如权利要求9所述的装置,其特征在于,如果所述同步指令为内存屏障指令,则所述DSM单元具体用于等待所有数据更新操作完成之后,返回代码执行权。
13.如权利要求9所述的装置,其特征在于,如果所述同步指令为原子操作指令,则所述DSM单元具体用于向其他节点发送广播通知,以使得其他节点将对应的数据设为只读,禁止对所述对应的数据进行同步操作,并在执行完所述原子操作指令之后将更新数据广播给其他节点,以使得其他节点更新所述对应的数据,并允许对所述对应的数据进行同步操作。
14.如权利要求9所述的装置,其特征在于,所述DSM单元还用于在代码执行的过程中产生缺页异常时,获取代码执行权。
15.如权利要求14所述的装置,其特征在于,如果所述缺页异常由读操作引起,则所述DSM单元生成所述读操作所针对的数据的副本,并使得其他节点上对应的副本设为只读;如果所述缺页异常由写操作引起,则当所述写操作所针对的页面不存在时,所述DSM单元申请高速缓存并将数据写入该高速缓存中,当所述写操作所针对的页面存在时,所述DSM单元更新数据并将更新的数据以及更新的全局时间广播给其他节点,以便其他节点根据所述全局时间更新对应的数据。
16.如权利要求9所述的装置,其特征在于,所述装置在操作系统或应用程序之下运行,或者被包括在操作系统中。
17.如权利要求9-16任一项所述的装置,其特征在于,所述并发多写协议为写更新协议。
18.一种数据处理系统,其特征在于,包括:操作系统和在所述操作系统之下运行的如权利要求9-16任一项所述的数据同步装置。
技术领域本发明实施例涉及数据处理领域,并且更具体地,涉及数据同步方法和装置。
背景技术内存系统的一致性问题是多处理机系统中的关键技术,特别在高端服务器竞争领域,高效的内存一致性协议与实现是决定高端服务器性能的几个最为关键因素之一。在诸如银行、证券、政府或企业的关键服务领域,高端服务器更是必然的选择。通过高速互联芯片、高效互联拓扑结构以及可扩展的协议支持,硬件实现的内存一致性多处理机系统基本占据了整个服务器市场。然而,硬件实现的高性能也伴随着高昂的价格。软件实现的内存一致性多处理机系统受限于通信延迟以及一致性模型的制约,很难实现高效的内存一致性的多处理机系统。可以通过虚拟化层把多个处理机系统虚拟化成为一个大的SMP(Symmetricalxa0Multi-Processing,对称多处理)系统提供给操作系统,软件实现了内存一致性的多处理机系统。上述方案使用基于写无效操作的内存一致性策略和相关的接口,利用异常、中断等来陷入虚拟机监控器(VMM,Virtualxa0Machinexa0Monitor)。然而,该方案不支持并发多写协议。在一些场景下,并发多写协议能够比写无效协议减少50%左右的CPU(Centralxa0Processingxa0Unit,中央处理器)占用率。因此,支持并发多写的内存一致性协议虚拟非一致性内存访问系统的效率会更高。但是,数据的并发多写会引起各个节点间相应的数据不同步的问题。
发明内容本发明实施例提供一种数据同步方法和装置,能够解决支持并发多写的内存一致性协议所带来的同步问题。一方面,提供了一种数据同步方法,包括:代码扫描单元扫描代码以捕获同步指令;代码扫描单元将所捕获的同步指令替换为陷入指令;在代码运行至陷入指令时,分布式共享内存DSM单元获取代码执行权,其中DSM单元实现并发多写协议,在执行所述同步指令时实现单写协议。另一方面,提供了一种数据同步装置,包括:代码扫描单元,用于扫描代码以捕获同步指令,将所捕获的同步指令替换为陷入指令;分布式共享内存DSM单元,用于在代码运行至陷入指令时,获取代码执行权,其中DSM单元实现并发多写协议,在执行同步指令时实现单写协议。另一方面,提供了一种数据处理系统,包括:操作系统和在操作系统之下运行的上述数据同步装置。本发明实施例在代码执行前进行预扫描,将可能影响数据同步的同步指令替换为陷入指令,使得在代码运行至所述陷入指令时,代码执行权陷入至实现并发多写协议的DSM单元,而DSM单元在执行同步指令时实现单写协议,从而能够支持并发多写协议,并且解决了并发多写协议带来的同步问题。
附图说明为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的数据同步装置的框图。图2是本发明实施例提供的数据同步方法的流程图。图3是本发明实施例提供的数据同步过程的一个例子的示意性流程图。图4是本发明实施例提供的数据同步过程的示意架构图。图5是本发明实施例提供的数据同步系统的示意架构图。图6是本发明一个实施例的数据处理系统的框图。
具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。应理解,本发明的技术方案可以应用于多处理机系统。本发明实施例将以Intelxa0x86xa0CPU(Centralxa0Processingxa0Unit,中央处理单元)架构为例进行说明,但本发明实施例并不限于Intelxa0x86架构,还可以包含其它支持TSO(Totalxa0Storexa0Ordering,全存储排序)同步模型的CPU架构。另外,本发明的方案还可以应用于虚拟化应用。在分布式内存一致性系统下,代码中会包含内存一致性模型要求的同步指令,例如,原子操作和内存屏障等敏感指令。当分布式内存一致性系统支持并发多写的内存一致性协议时,这些同步指令会给数据同步带来问题,例如数据不同步等等问题。根据本发明实施例的同步指令并不限于上述特定术语,例如,同步指令还可以包括会影响数据同步的其他形式的指令,例如加锁前缀指令(由一系列原子操作组成)等。图1是本发明一个实施例提供的数据同步装置的框图。数据同步装置100包括代码扫描单元110和DSM(Distributedxa0Sharedxa0Memory,分布式共享内存)单元120。代码扫描单元110扫描代码以捕获同步指令,并将所捕获的同步指令替换为陷入(trap)指令。可选地,作为一个实施例,代码扫描单元110可以页面(page)为单位进行代码扫描。所扫描的代码可以是将在操作系统或应用程序上执行的任何代码。代码扫描单元110的扫描操作可以在新的程序或虚拟机装载后、转入程序或虚拟机上下文执行前触发,也可以由其他组件调用触发,例如由DSM单元120调用代码扫描单元110进行扫描操作。DSM单元120在代码运行至所述陷入指令时,获取代码执行权,其中DSM单元实现并发多写协议,但在执行同步指令时实现单写协议。本发明实施例在代码执行前进行预扫描,将可能影响数据同步的同步指令替换为陷入指令,使得在代码运行至所述陷入指令时,代码执行权陷入至实现并发多写协议的DSM单元,而DSM单元在执行同步指令时实现单写协议,从而能够支持并发多写协议,并且解决了并发多写协议带来的同步问题。可选地,根据本发明的另一实施例,代码扫描单元110还扫描代码以捕获流程改变指令,例如跳转jmp、调用call和调用返回ret等指令,并将上述流程改变指令替换为上述陷入指令。这些流程改变指令会使代码执行至其他页面的对应代码,假如该对应代码也是同步指令,则可能也会影响数据同步。因此本发明实施例可以将流程改变指令替换为陷入指令,由DSM单元120实现间接跳转,防止由此带来的同步问题。例如,DSM单元120在执行上述流程改变指令时,判断流程改变指向的目标页面是否为已扫描的页面。在该流程改变指向的目标页面为已扫描的页面时,将执行流程改变至该已扫描的页面中的对应代码并执行该对应代码,在该流程改变指向的目标页面为未扫描的页面时,调用代码扫描单元110对该未扫描的页面执行该扫描代码以捕获同步指令并将所捕获的同步指令替换为陷入指令。可选地,根据本发明的一个实施例,如果上述同步指令为内存屏障指令,则DSM单元120可以等待所有数据更新操作完成之后,返回代码执行权。可选地,根据本发明的一个实施例,如果上述同步指令为原子操作指令,则DSM单元120可以向其他节点发送广播通知,以使得其他节点将对应的数据设为只读,禁止对该对应的数据进行同步操作,并在执行完该原子操作指令之后将更新数据广播给其他节点,以使得其他节点更新对应的数据,允许对该对应的数据进行同步操作。进一步,根据本发明的另一实施例,除了陷入指令之外,DSM单元120还在代码执行的过程中产生缺页异常(pagexa0fault)时,获取代码执行权。例如,如果缺页异常由读操作引起,则DSM单元120生成上述读操作所针对的数据的副本,并使得其他节点上对应的副本设为只读。如果缺页异常由写操作引起,则当上述写操作所针对的页面不存在时,DSM单元120申请高速缓存并将数据写入该高速缓存中;当上述写操作所针对的页面存在时,DSM单元120更新数据并将更新的数据以及更新的全局时间广播给其他节点,以便其他节点根据该全局时间更新对应的数据。可选地,数据同步装置100可以在操作系统或应用程序之下运行,这样无需对操作系统或应用程序进行修改,具有较好的通用性。或者,数据同步装置100也可以被包括在操作系统中。在此情况下,操作系统需要修改内存屏障和原子操作等同步指令的源代码实现,用DSM单元提供的接口来代替,但是这种修改比较小,容易实现。可选地,根据本发明的一个实施例,上述并发多写协议为写更新(writexa0update)协议。本发明实施例通过软件扫描的方式在代码执行前对同步指令进行捕获,并基于内存一致性协议处理同步指令陷入请求,从而支持多读多写协议。例如,在基于同步模型的多处理机系统中,通过软件方法(通过缺页异常和陷入指令)捕获对共享数据的更新操作,并对更新操作进行广播,通知其他处理器更新其对应的高速缓冲存储器(Cache)。对于陷入指令捕获,可以同步所有更新操作,等待更新操作结束。从而能够支持并发多写协议,并且解决了并发多写协议带来的同步问题。上面描述了根据本发明实施例的数据同步装置,下面结合图2描述根据本发明实施例的数据同步方法。图2是本发明一个实施例提供的数据同步方法的示意性流程图。图2的方法可以由图1的数据同步装置100执行。210,扫描代码以捕获同步指令。例如,可以由数据同步装置100的代码扫描单元110执行步骤210。如上所述,代码扫描单元110可以在新的程序或虚拟机装载之后、或者转入程序或虚拟机上下文执行之前、或者程序跳转到未扫描的代码页时,对代码进行扫描,以识别原子操作、内存屏障(Memoryxa0Barrier)等同步指令。220,将所捕获的同步指令替换为陷入指令。例如,当代码扫描单元110扫描到原子操作和/或内存屏障指令等同步指令时,用陷入指令替换同步指令。在本发明实施例中,用陷入指令替换同步指令也包括在同步指令之前加入陷入指令的情况。230,在代码运行至该陷入指令时,分布式共享内存DSM单元获取代码执行权,其中该DSM单元实现并发多写协议,在执行同步指令时实现单写协议。在操作系统或应用程序执行代码时,当代码运行至陷入指令时,代码执行权会陷入至DSM单元,即DSM单元从操作系统或应用程序获得代码执行权并执行所替换的同步指令。例如,在由于内存屏障指令而陷入DSM单元的情况下,DSM单元可以检查本节点是否存在等待远程更新响应的请求,如果存在,则等待其结束;如果不存在,则跳转到内存屏障指令的下一条指令进行处理。如果是由于原子写操作而陷入到DSM单元,则DSM单元发送远程写更新到远程节点,然后等待其返回后才继续执行。本发明实施例在代码执行前进行预扫描,将可能影响数据同步的同步指令替换为陷入指令,使得在代码运行至陷入指令时,代码执行权陷入至实现并发多写协议的DSM单元,而DSM单元在执行同步指令时实现单写协议,从而能够支持并发多写协议,并且解决了并发多写协议带来的同步问题。可选地,根据本发明的另一实施例,还可以扫描代码以捕获流程改变指令,并将上述流程改变指令替换为上述陷入指令。例如,代码中还可能包括跳转、调用、调用返回等改变程序指令流程的流程改变指令,这些指令所指向的目标页面也可能存在原子操作和内存屏障等同步指令。为了避免由于跳转到或调用新的页面而引起的同步问题,可以将上述流程改变指令也替换为陷入指令,使得在执行到该陷入指令时可以陷入到DSM单元进行间接跳转,在需要的情况下调用代码扫描单元对流程改变的目标页面进行扫描。具体地,DSM单元在执行流程改变指令时,判断流程改变指向的目标页面是否为已扫描的页面。在流程改变指向的目标页面为已扫描的页面时,将执行流程改变至已扫描的页面中的对应代码并执行该对应代码。在流程改变指向的目标页面为未扫描的页面时,对该未扫描的页面执行步骤210和220的过程,并在扫描之后继续执行该页面上的对应代码。可选地,根据本发明的一个实施例,如果同步指令为内存屏障指令,则在230中,DSM单元等待所有数据更新操作完成之后,返回代码执行权。可选地,根据本发明的另一实施例,如果同步指令为原子操作指令,则在230中,向其他节点发送广播通知,以使得其他节点将对应的数据设为只读,禁止对对应的数据进行同步操作;在执行完原子操作指令之后将更新数据广播给其他节点,以使得其他节点更新对应的数据,并允许对该对应的数据进行同步操作。进一步,根据本发明的另一实施例,还可以在代码执行的过程中产生缺页异常时,DSM单元获取代码执行权。如果缺页异常由读操作引起,则DSM单元生成读操作所针对的数据的副本,并使得其他节点上对应的副本设为只读。如果缺页异常由写操作引起,则当写操作所针对的页面不存在时,DSM单元申请高速缓存并将数据写入该高速缓存中,当写操作所针对的页面存在时,DSM单元更新数据并将更新的数据以及更新的全局时间广播给其他节点,以便其他节点根据全局时间更新对应的数据。可选地,根据本发明的一个实施例,上述并发多写协议为写更新协议。下面结合具体例子,更加详细地描述本发明的实施例。图3是本发明实施例的数据同步过程的一个例子的示意性流程图。首先进行代码预扫描。代码预扫描的过程包括下面的步骤301至306。301,扫描代码。例如,上述代码扫描单元可以在新的程序或虚拟机装载之后、或者转入程序或虚拟机上下文执行之前、或者程序跳转到未扫描的代码页时,对代码进行扫描,以识别原子操作、内存屏障等同步指令和/或流程改变指令。根据本发明的一个实施例,扫描的粒度可以为体系机构下物理页框大小。302,确定代码中是否有同步指令和/或流程改变指令。如果有,则执行步骤303,否则执行步骤305。303,在确定代码中有同步指令和/或流程改变指令时,用陷入指令替换同步指令和/或流程改变指令。304,确定是否扫描完整个页面。如果是,则执行步骤305,否则,返回重新执行步骤301。305,当扫描完整个页面时,标记该页面已扫描。这里还可以判断该页的脏位(dirtyxa0bit)是否置位,如果是,则表示该页数据已经被修改,此页为临时代码页,需要重新扫描该页面,因此也返回重新执行步骤301。306,结束扫描。在执行步骤301至306的代码预扫描过程之后,可以执行下面的步骤307至311,以执行代码并在遇到陷入指令时进行陷入操作。307,执行代码。例如,系统可以以物理页为单位执行代码。308,系统是否发现有缺页异常(pagexa0fault)或代码中是否有陷入指令。如果有缺页异常或代码中有陷入指令,则执行步骤309,否则,返回步骤307。例如,基于TSO同步模型使用写更新协议,通常有两种类型陷入:在遇到缺页异常时陷入和在遇到陷入指令时陷入。例如在上述执行代码的过程中,如果遇到陷入指令,则陷入DSM单元进行处理,否则继续执行代码。另外,如果系统发现有缺页异常,也会陷入到DSM单元进行处理。309,代码执行权陷入DSM单元。例如,当系统检测到缺页异常时陷入或者在执行代码时遇到陷入指令时,操作系统或应用程序可以将代码执行权移交给DSM单元,即陷入至DSM单元,由DSM单元执行相关代码。310,如果DSM单元执行的相关代码为流程改变指令且目标页面未扫描,则执行步骤301-306,调用代码扫描单元对目标页面进行代码预扫描。否则,执行步骤311。具体地,在陷入DSM单元后,如果DSM单元在执行代码过程中遇到流程改变指令(例如,jmp,call,ret等改变程序指令流程的指令),可以调用扫描系统服务程序来进行间接跳转,该服务程序根据执行时的动态地址信息判定该跳转所指向的页面是否为一个已扫描过的页面,如果是则直接跳转到对应的代码执行,否则发起新一轮扫描。311,DSM单元执行相关代码,如同步指令或流程改变的目标页面(已扫描)的对应指令。DSM单元实现并发多写协议,在执行同步指令时实现单写协议。在缺页异常情况下,若为读操作,则把远端内存数据的一个副本拷贝到本地,所有副本都改成只读。若为写操作,若数据所在的页不存在,则申请一个cache,用该数据初始化;若存在该页,则更新该页的相应数据,然后携带一个修改数据段的全局时间和内容广播给其他节点,把执行权返回给操作系统。其他节点收到写更新数据后,比较全局时间,若全局时间比该节点上相应数据最近更新的全局时间晚,则更新该节点上的相应数据,否则不更新。其他节点可以返回更新确认。在同步指令的情况下,若同步指令为内存屏障指令,则等待所有并发多写操作完成后,再把执行权返回给操作系统。若为原子操作等同步指令,则广播通知到每个节点,把其他节点对应的该数据设为只读,禁止对该数据进行同步操作。此后DSM单元执行原子操作等同步指令,执行完成后将更新数据广播到其他节点。其他节点收到该信息后,更新数据,并允许对该数据进行同步操作。这样,在执行同步指令时实现了单写协议,避免了数据不同步的问题。312,DSM单元返回执行权给操作系统或应用程序。例如,DSM单元执行完陷入指令所替换的代码之后或者在处理完缺页异常之后,将代码执行权移交给操作系统或应用程序。另外,DSM单元在将执行权返回给操作系统或应用程序前,可以判断其指令入口点(x86下为eip或rip)的值所在的页面是否已被扫描,如果没有被扫描,则调用代码扫描单元执行上述代码预扫描过程(步骤301-306)。还可以判断该页的脏位(dirtyxa0bit)是否置位,如果是,则表示页数据已经被修改,则此页为临时代码页,DSM单元调用代码扫描单元重新执行代码预扫描过程,对该页面重新进行扫描。上面描述了根据本发明实施例的数据同步装置和数据同步方法,下面结合图4和图5描述根据本发明实施例的数据同步系统。图4是本发明一个实施例提供的数据同步系统的示意性架构图。数据同步系统可包括多个节点。虽然图4中仅仅例示了第一节点A和第二节点B,但本发明实施例不限于此,本发明的数据同步系统可以包括更多个节点。如图4所示,第一节点A和第二节点B共同使用操作系统430。操作系统430包括第一节点A上的可执行代码440A以及第二节点B上的可执行代码440B。此外,如图4的虚框所示,第一节点A包括由代码扫描单元410A和DSM单元420A组成的数据同步装置405A,第二节点B包括由代码扫描单元410B和DSM单元420B组成的数据同步装置405B。下文中,在不需要区分的情况下,将代码扫描单元410A和410B统称为代码扫描单元410,或者将DSM单元420A和420B统称为DSM单元420,或者将可执行代码440A和440B统称为可执行代码440。操作系统430或应用程序在代码扫描单元410和DSM单元420上运行。数据同步装置405A和405B类似于图1的数据同步装置100,并且可以执行图2或图3所示的方法,为避免重复,不再赘述。例如,代码扫描单元410对可执行代码440进行扫描,以捕获原子操作和内存屏障等同步指令和/或流程改变指令,并且用陷入指令替换所捕获的同步指令和/或流程改变指令,以便可执行代码运行至陷入指令时,会陷入至DSM单元420执行所替换的同步指令和/或流程改变指令。DSM单元420实现并发多写协议,并且在遇到原子操作和内存屏障等同步指令时,DSM单元420所实现的协议由多写协议变为单写协议,在执行完成这些同步指令之后,可以恢复为并发多写协议。DSM单元420可运行在特权级,在陷入到DSM单元420时,执行权从操作系统430或应用程序移交至DSM单元420,DSM单元420执行完相应的操作,将执行权返回给操作系统430或应用程序。数据同步装置405A和405B之间可通过DSM协议进行数据同步操作。当需要其他节点进行操作时,例如广播更新的数据或者禁止其他节点对相应数据进行同步操作的情况下,通过DSM协议进行节点间的交互。根据本发明实施例,为提高DSM系统的通用性和性能,采用代码扫描方法透明支持操作系统和应用程序内存屏障等同步指令,并实现并发多写协议。另外,本实施例的数据同步装置运行在操作系统或应用程序之下,无需对操作系统或应用程序进行修改,因此具有较好的通用性。图5是本发明一个实施例提供的数据同步系统的示意性架构图。图5的实施例与图4的实施例的不同之处在于,图5的数据同步装置被包括在操作系统中。在图5中,与图4相同或相似的部分使用相似的附图标记表示,并适当省略详细描述。如图5所示,第一节点A上的操作系统530A包括可执行代码540A、代码扫描单元510A和DSM单元520A。代码扫描单元510A和DSM单元520A组成数据同步装置505A。第二节点B上的操作系统530B包括可执行代码540B、代码扫描单元510B和DSM单元520B。代码扫描单元510B和DSM单元520B组成数据同步装置505B。数据同步装置505A和505B类似于图1的数据同步装置100,并且可以执行图2或图3所示的方法,为避免重复,不再赘述。例如,数据同步装置505A和505B之间可通过DSM协议进行数据同步操作。当需要其他节点进行操作时,例如广播更新的数据或者禁止其他节点对相应数据进行同步操作的情况下,通过DSM协议进行节点间的交互。需要说明的是,在实现本实施例时,操作系统530A和530B需要修改内存屏障和原子操作等同步指令的源代码实现,用DSM单元提供的接口来代替,但是这种修改比较小,容易实现。图6是本发明一个实施例的数据处理系统的框图。图6的数据处理系统包括操作系统61和在操作系统61之下运行的数据同步装置62。数据同步装置62包括代码扫描单元621和DSM单元622。代码扫描单元621扫描代码以捕获同步指令,将所捕获的同步指令替换为陷入指令。DSM单元622在代码运行至陷入指令时,从操作系统61获取代码执行权,其中DSM单元实现并发多写协议,在执行同步指令时实现单写协议。本发明实施例在代码执行前进行预扫描,将可能影响数据同步的同步指令替换为陷入指令,使得在代码运行至所述陷入指令时,代码执行权陷入至实现并发多写协议的DSM单元,而DSM单元在执行同步指令时实现单写协议,从而能够支持并发多写协议,并且解决了并发多写协议带来的同步问题。此外,图6的数据处理系统的一个例子是图4所示的一个节点,数据同步装置62运行在操作系统61之下,因此无需对现有的操作系统进行修改,具有较好的通用性。数据通信装置62的一个例子是上述图1所示的数据同步装置100,并且可执行图2-图3中的方法实施例的各个步骤,为避免重复,不再赘述。根据本发明的实施例引入了一种软件实现的高性能内存一致性的多处理系统,通过以软件的方式整合廉价的服务器或工作站来形成一种高性能的、低价格的高端服务器系统,解决了分布式内存一致性系统中存在的并发多写协议带来的内存屏障指令等同步问题,并且支持操作系统厂商提供的操作系统或应用程序无任何修改地运行或者修改较小,提高了分布式内存一致性系统的通用性。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Onlyxa0Memory)、随机存取存储器(RAM,Randomxa0Accessxa0Memory)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。